﻿#ifndef NOZZLEHOLDER_H
#define NOZZLEHOLDER_H

#include <QSettings>
class NozzleHolder
{
public:
    NozzleHolder();
    ~NozzleHolder();

    /**
     * @brief loadSettings 从配置文件载入各种参数
     * @param settings
     */
    void loadSettings(QSettings &settings);

    /**
     * @brief writeSettings 将第一个喷嘴位置回写入配置文件
     * @param settings
     */
    void writeSettings(QSettings &settings);

    /**
     * @brief dumpSettings 将所有参数写入配置文件
     * @param settings
     */
    void dumpSettings(QSettings &settings);

    /**
     * @brief getColRow 将坐标值转化为喷嘴行列位置
     * @param [in] x_mm 坐标值 x
     * @param [in] y_mm 坐标值 y
     * @param [out] row 行号，从 0 开始计数，-1 表示不在喷嘴的标准位置
     * @param [out] col 列号，从 0 开始计数，-1 表示不在喷嘴的标准位置
     */
    void getColRow(double x_mm, double y_mm, int &row, int &col);

    /**
     * @brief getPosition 将喷嘴的行列位置转化为坐标值
     * @param [in] row 喷嘴的行位置
     * @param [in] col 喷嘴的列位置
     * @param [out] x_mm   对应的坐标值
     * @param [out] y_mm   对应的坐标值
     */
    void getPosition(int row, int col, double &x_mm, double &y_mm);

    /**
     * @brief setNozzleZeroPos 设置喷嘴零位的位置坐标
     * @param x_mm  x 坐标，单位 mm
     * @param y_mm  y 坐标，单位 mm
     */
    void setNozzleZeroPos(double x_mm, double y_mm);

    void getNozzleZeroPos(double &x_mm, double &y_mm);
    /**
     * @brief resetNozzleZeroPos 恢复喷嘴的默认位置
     */
    void resetNozzleZeroPos();
private:
    int m_colCount; //喷嘴支架的列数
    int m_rowCount; //喷嘴支架的行数
    int m_colSpacing; //喷嘴支架的列间隔，单位 mm
    int m_rowSpacing; //喷嘴支架的行间隔，单位 mm

    double m_origin_x; //喷嘴的零位
    double m_origin_y;

    double m_default_x; //喷嘴零位的默认值
    double m_default_y;
};

#endif // NOZZLEHOLDER_H
